home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Examples / IndexingKit / Ledger / JFTableViewLoader.m < prev    next >
Text File  |  1993-01-25  |  4KB  |  177 lines

  1.  
  2. #import "JFTableViewLoader.h"
  3. #import "JFTableVectorConfiguration.h"
  4. /* 
  5.  *    JFTableViewLoader, NeXT Systems Engineering
  6.  *    Written by Joe Freeman
  7.  *
  8.  *    A list of these configuration objects is fed to a JFTableViewLoader
  9.  *    to tell it what ivars and titles map into a DBTableView
  10.  */
  11.  
  12.  
  13. @implementation JFTableViewLoader
  14.  
  15. /* static char VERSION[] = " @(#) Version: 2, Project: TableViewLoader, Written By: Joe Freeman, 1992"; */
  16.  
  17. - (const char *)getInspectorClassName
  18. {
  19.     return "JFDBTVLoaderInspector";
  20. }
  21.  
  22. - setTableView:anObject;
  23. {
  24.     tableView = anObject;
  25.     [tableView setDataSource:self];
  26.     return self;
  27. }
  28.  
  29.  
  30. - setDataList:anObject
  31. {
  32.     dataList = anObject;
  33.     [tableView reloadData:self];
  34.  
  35.     return self;
  36. }
  37.  
  38.  
  39. /* this doesn't do what we want in the inspector in IB
  40.  * because it relies on the tableView nstance var being set up
  41.  * in ib, the connections in build mode, are fake.  So,
  42.  * we have to have this method happen in awake
  43.  */
  44. - setConfigurationList:cList
  45. {
  46.  
  47.     int                 i;
  48.     int                 tCount;
  49.     id                 <DBTableVectors > aVector;
  50.  
  51.     [[tableView window] disableFlushWindow];    /* DBTV ignores autodisplay */
  52.     configList = cList;
  53.  /* configure the columns */
  54.  /* first figure out how many columns there are, and how many we need */
  55.     tCount = [tableView columnCount];
  56.  
  57.     for (i = [configList count]; i < tCount; i++)
  58.     [tableView removeColumnAt:[configList count]];
  59.  
  60.  /* then make the numbers match and load up the titles and identifiers */
  61.     for (i = 0; i < [configList count]; i++) {
  62.     if (i < tCount) {
  63.         aVector = [tableView columnAt:i];
  64.         [aVector setIdentifier:(id)i];
  65.         [aVector setTitle:[[configList objectAt:i] title]];
  66.     } else {
  67.         [tableView addColumn:(id)i
  68.          withTitle:[[configList objectAt:i] title]];
  69.     }
  70.     }
  71.  
  72.     [[tableView window] reenableFlushWindow];
  73.     [[tableView window] flushWindowIfNeeded];
  74.  
  75.     return self;
  76. }
  77.  
  78. - setDataList:anObject andConfigurationList:cList
  79. {
  80.     [self setConfigurationList:cList];
  81.  /* now load em up */
  82.     [self setDataList:anObject];
  83.     return self;
  84. }
  85.  
  86. /*======================================================================
  87.  *    Inspector support
  88.  *======================================================================*/
  89.  
  90. - (DBTableView *) tableView
  91. {
  92.     return tableView;
  93. }
  94.  
  95. - (List *) dataList
  96. {
  97.     if (dataList)
  98.     return dataList;
  99.     else
  100.     return[[List alloc] init];
  101. }
  102.  
  103. - (List *) configList
  104. {
  105.     if (configList)
  106.     return configList;
  107.     else
  108.     return[[List alloc] init];
  109. }
  110.  
  111. /*======================================================================
  112.  *    Archiving
  113.  *======================================================================*/
  114.  
  115. - awakeFromNib
  116. {
  117.     [self setConfigurationList:configList];
  118.     return self;
  119. }
  120.  
  121. - read:(NXTypedStream *) typedStream
  122. {
  123.     [super read:typedStream];
  124.  
  125.     dataList = NXReadObject(typedStream);
  126.     configList = NXReadObject(typedStream);
  127.     tableView = NXReadObject(typedStream);
  128.  
  129.     return self;
  130. }
  131.  
  132. - write:(NXTypedStream *) typedStream
  133. {
  134.     [super write:typedStream];
  135.  
  136.     NXWriteObjectReference(typedStream, dataList);
  137.     NXWriteObject(typedStream, configList);
  138.     NXWriteObjectReference(typedStream, tableView);
  139.     return self;
  140. }
  141.  
  142. /*======================================================================
  143.  *    DBTableView data source (psuedo-delegate) methods
  144.  *======================================================================*/
  145.  
  146. - (unsigned int)rowCount
  147. {
  148.     return[dataList count];
  149. }
  150.  
  151. /* DBTV sends this message when it needs to know what to display */
  152. - getValueFor:identifier at:(unsigned int)aPosition into:aValue
  153. {
  154.  /*
  155.   * note that when loaded, we set the identifiers to be the locations of the
  156.   * configuration objects in the configuration list 
  157.   */
  158.     if (configList)
  159.     [[configList objectAt:(int)identifier]
  160.      getValueFromObject:[dataList objectAt:aPosition]
  161.      into:aValue];
  162.     else
  163.     [aValue setStringValue:""];
  164.     return nil;
  165. }
  166.  
  167. /* DBTV sends this message when data in a cell has changed */
  168. - setValueFor:identifier at:(unsigned int)aPosition from:aValue
  169. {
  170.     [[configList objectAt:(int)identifier]
  171.      setValueForObject:[dataList objectAt:aPosition]
  172.      from:aValue];
  173.     return nil;
  174. }
  175.  
  176. @end
  177.